home *** CD-ROM | disk | FTP | other *** search
- /*_ fltpnt.h Sat Mar 30 1991 Modified by: Walter Bright */
-
- #ifndef __FLTPNT_H
- #define __FLTPNT_H 1
-
- #if __cplusplus
- extern "C" {
- #endif
-
- #ifdef __STDC__
- #define __CDECL
- #define __STDCALL
- #else
- #define __CDECL __cdecl
- #define __STDCALL __stdcall
- #endif
-
- #if __OS2__ && __INTSIZE == 4
- #define __CLIB __STDCALL
- #else
- #define __CLIB __CDECL
- #endif
-
- typedef float float_t;
- typedef double double_t;
-
- #if __SC__ >= 0x300
- #define INFINITY __inf
- #define NAN __nan
- #define NANS __nans
- #endif
-
- #define FP_NANS 0
- #define FP_NANQ 1
- #define FP_INFINITE 2
- #define FP_NORMAL 3
- #define FP_SUBNORMAL 4
- #define FP_ZERO 5
-
- unsigned __CDECL __fpclassify_f(float);
- unsigned __CDECL __fpclassify_d(double);
-
- #if __cplusplus
- extern "C++" {
- inline int fpclassify(float fe) { return __fpclassify_f(fe); }
- inline int fpclassify(double fe){ return __fpclassify_d(fe); }
- inline int signbit(float fe) { return ((short *)&(fe))[1] & 0x8000; }
- inline int signbit(double fe) { return ((short *)&(fe))[3] & 0x8000; }
- inline int isfinite(float fe) { return fpclassify(fe) >= FP_NORMAL; }
- inline int isfinite(double fe) { return fpclassify(fe) >= FP_NORMAL; }
- inline int isnormal(float fe) { return fpclassify(fe) == FP_NORMAL; }
- inline int isnormal(double fe) { return fpclassify(fe) == FP_NORMAL; }
- inline int isnan(float fe) { return fpclassify(fe) <= FP_NANQ; }
- inline int isnan(double fe) { return fpclassify(fe) <= FP_NANQ; }
- }
- #else
- #define fpclassify(fe) (sizeof(fe) == sizeof(float) ? \
- __fpclassify_f(fe) : \
- __fpclassify_d(fe))
- #define signbit(fe) (sizeof(fe) == sizeof(float) ? \
- (int)(((short *)&(fe))[1] & 0x8000) : \
- (int)(((short *)&(fe))[3] & 0x8000))
- #define isfinite(fe) (fpclassify(fe) >= FP_NORMAL)
- #define isnormal(fe) (fpclassify(fe) == FP_NORMAL)
- #define isnan(fe) (fpclassify(fe) <= FP_NANQ)
- #endif
-
- double __CDECL copysign(double x,double y);
- float __CDECL copysignf(float x,float y);
- long double __CDECL copysignl(long double x,long double y);
-
- double __CDECL logb(double x);
- float __CDECL logbf(float x);
- long double __CDECL logbl(long double x);
-
- double __CDECL nextafter(double x,double y);
- float __CDECL nextafterf(float x,float y);
- long double __CDECL nextafterl(long double x,long double y);
-
- double __CDECL scalb(double x,long int n);
- float __CDECL scalbf(float x,long int n);
- long double __CDECL scalbl(long double x,long int n);
-
- double __CDECL nan(const char *tagp);
- float __CDECL nanf(const char *tagp);
- long double __CDECL nanl(const char *tagp);
-
- double __CDECL nans(const char *tagp);
- float __CDECL nansf(const char *tagp);
- long double __CDECL nansl(const char *tagp);
-
- double __CDECL remainder(double x,double y);
- float __CDECL remainderf(float x,float y);
- long double __CDECL remainderl(long double x,long double y);
-
- double __CDECL remquo(double x,double y,int *quo);
- float __CDECL remquof(float x,float y,int *quo);
- long double __CDECL remquol(long double x,long double y,int *quo);
-
- double __CDECL rint(double x);
- float __CDECL rintf(float x);
- long double __CDECL rintl(long double x);
-
- double __CDECL round(double x);
- float __CDECL roundf(float x);
- long double __CDECL roundl(long double x);
-
- double __CDECL nearbyint(double x);
- float __CDECL nearbyintf(float x);
- long double __CDECL nearbyintl(long double x);
-
- double __CDECL trunc(double x);
- float __CDECL truncf(float x);
- long double __CDECL truncl(long double x);
-
- long int __CDECL rndtol(long double x);
- long int __CDECL rndtonl(long double x);
-
- /* long double is same as double */
- #define copysignl copysign
- #define logbl logb
- #define nextafterl nextafter
- #define scalbl scalb
- #define nanl nan
- #define nansl nans
- #define remainderl remainder
- #define remquol remquo
- #define rintl rint
- #define roundl round
- #define nearbyintl nearbyint
- #define truncl trunc
-
-
- #if __cplusplus
- }
- #endif
-
- #endif /* __FLTPNT_H */
-
-